#ifndef RENDERINGSYSTEM
#define RENDERINGSYSTEM

#include "Image.h"
#include "Camera.h"
#include "Vector3.h"
#include "SurfaceObject.h"
#include "SceneStructure.h"
#include "PhotonMap.h"
#include <iostream>

//using namespace std;

class RenderingSystem {

    public:
    RenderingSystem() {
        NumberOfPhotons_IndirectLighting = 0;
        _IndirectLightingPhotonMap = 0;
    }

    void Render(Image&, Camera&);
    void SetScene(SceneStructure &newScene) {_CurrentScene = &newScene;}
    float SoftShadow(Vector3, int);
    float AmbientOcclusion(Vector3, Vector3, SurfaceObject*);
    Vector3 FinalGather(Vector3, Vector3, SurfaceObject*);
    Vector3 GetIndirectLighting(float, int, Vector3);
    Vector3 GetCaustics(float, int, Vector3);
    Vector3 Trace(Ray);
    int NumberOfPhotons_IndirectLighting;
    int NumberOfPhotons_Caustics;
    private:
    PhotonMap * _IndirectLightingPhotonMap;
    PhotonMap * _CausticsPhotonMap;
    SceneStructure * _CurrentScene;
};


#endif




